package com.ato.java;

/**
 * @author wangjing
 * @create 2021--08--08--20:26
 */



/**
 *   当一个子类需要继承多个父类时，但是java不支持多继承，有了接口，可以达到多重继承的效果
 *      特点：
 *          接口是一种规范，可以理解为能不能，而继承则为是不是的关系
 *          无法定义构造器，不能实例化
 *      使用
 *          1：interface 定义
 *          2：在java中接口和类是并列的两个机构
 *          3：如何定义：  定义接口中的成员
 *              3-1：只能定义全局常量和抽象方法
 *                  全局常量： public static final   默认就是常量和抽象方法，可以直接省略 public static final
 *                  抽象方法：public abstract  可以直接省略 public abstract
 *                  JDK8.0以后
 *                      还可以定义静态方法，默认方法
 *          4：接口都通过让类去实现：implements   如果重写类重写完接口的所有方法。那么这个类就可以实例化
 *          5：java类可以实现多个接口---->弥补java的类的单继承性的局限性   要new就需要实现所有你implements 的所有接口的方法的实现（重写）
 *                  比如：class Plan2  implements Flyable,Attachment{}
 *                  有一种特殊的：
 *                  class Plan2 extends Plan  implements Flyable,Attachment{}
 *                  表示：先继承在实现接口
 *         6： 接口和接口之间也可以继承。
 *                  接口与接口之间可以多继承！！！！
 *                  如果有一个类要实现这个继承了多个接口的接口，那么需要实现所有接口的抽象类方法
 *
 */
public class Interface {
    public static void main(String[] args) {
        Plan plan = new Plan();
        plan.fly();
//       一个类实现了多个接口。那么就需要重写所有接口的抽象方法，实现重写后，就可以new 并且调用了
        Plan2 p2 = new Plan2();
        p2.fly();
        p2.doAttach();
    }
}
interface Flyable{
    //    全局常量  ：  可以省略public static final   接口默认就会有
    public static  final int MAX_SPEED = 123;
    int MIX_SPEED = 1;
    public  abstract void  fly();
    void stop();

}
interface Attachment{
    //
    int MAX_ATTACHMENT = 100;
    int MIX_ATTACHMENT = 1;
    void doAttach();
  

}
class Plan  implements Flyable{

    @Override
    public void fly() {
        System.out.println("接口实现类重写接口的抽象方法：fly也叫实现了接口的方法");
    }

    @Override
    public void stop() {
        System.out.println("接口实现类重写接口的抽象方法：stop ，也叫实现了接口的方法");

    }
}
class Plan2  implements Flyable,Attachment{

    @Override
    public void fly() {
        System.out.println("接口实现类重写接口:Flyable 的抽象方法：fly也叫实现了接口的方法");
    }

    @Override
    public void stop() {
        System.out.println("接口实现类重写接口:Flyable 的抽象方法：stop ，也叫实现了接口的方法");

    }

    @Override
    public void doAttach() {
        System.out.println("接口实现类重写接口:Attachment 的抽象方法：doAttach ，也叫实现了接口的方法");
    }
}

interface  A{
    void  methods1();
}
interface  BB{
    void  methods2();}
interface  C extends  A,BB{}
class CC implements  C{
    @Override
    public void methods1() {}
    @Override
    public void methods2() {}
}

